原始题目:剑指 Offer 61. 扑克牌中的顺子 (opens new window)

解题思路:

如果要组成顺子,那最大的点数和最小的点数之差不能超过 55

可以将数组排序,然后计算除了 00 之外的最大值和最小值,判断点数之差是否超过 55

代码:

public boolean isStraight(int[] nums) {
    int joker = 0;
    Arrays.sort(nums);
    for (int i = 0; i < 4; i++) {
        if (nums[i] == 0) {
            // 统计大小王数量
            joker++;
        } else if (nums[i + 1] == nums[i]) {
            // 若有重复,提前返回 false
            return false;
        }
    }
    // 最大牌 - 最小牌 < 5 则可构成顺子
    return nums[4] - nums[joker] < 5;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

复杂度分析

  • 时间复杂度O(1)O(1):因为数组的大小恒等于 5 。
  • 空间复杂度O(1)O(1):辅助变量占用常数大小的额外空间。
上次更新: 2023/10/15